<?php

// TTTTTTTTTTTTTTTTTTTTTTT                  MMMMMMMM               MMMMMMMM                                CCCCCCCCCCCCMMMMMMMM               MMMMMMMM  SSSSSSSSSSSSSSS 
// T:::::::::::::::::::::T                  M:::::::M             M:::::::M                             CCC::::::::::::M:::::::M             M:::::::MSS:::::::::::::::S
// T:::::::::::::::::::::T                  M::::::::M           M::::::::M                           CC:::::::::::::::M::::::::M           M::::::::S:::::SSSSSS::::::S
// T:::::TT:::::::TT:::::T                  M:::::::::M         M:::::::::M                          C:::::CCCCCCCC::::M:::::::::M         M:::::::::S:::::S     SSSSSSS
// TTTTTT  T:::::T  TTTTTppppp   ppppppppp  M::::::::::M       M::::::::::M   eeeeeeeeeeee          C:::::C       CCCCCM::::::::::M       M::::::::::S:::::S            
//         T:::::T       p::::ppp:::::::::p M:::::::::::M     M:::::::::::M ee::::::::::::ee       C:::::C             M:::::::::::M     M:::::::::::S:::::S            
//         T:::::T       p:::::::::::::::::pM:::::::M::::M   M::::M:::::::Me::::::eeeee:::::ee     C:::::C             M:::::::M::::M   M::::M:::::::MS::::SSSS         
//         T:::::T       pp::::::ppppp::::::M::::::M M::::M M::::M M::::::e::::::e     e:::::e     C:::::C             M::::::M M::::M M::::M M::::::M SS::::::SSSSS    
//         T:::::T        p:::::p     p:::::M::::::M  M::::M::::M  M::::::e:::::::eeeee::::::e     C:::::C             M::::::M  M::::M::::M  M::::::M   SSS::::::::SS  
//         T:::::T        p:::::p     p:::::M::::::M   M:::::::M   M::::::e:::::::::::::::::e      C:::::C             M::::::M   M:::::::M   M::::::M      SSSSSS::::S 
//         T:::::T        p:::::p     p:::::M::::::M    M:::::M    M::::::e::::::eeeeeeeeeee       C:::::C             M::::::M    M:::::M    M::::::M           S:::::S
//         T:::::T        p:::::p    p::::::M::::::M     MMMMM     M::::::e:::::::e                 C:::::C       CCCCCM::::::M     MMMMM     M::::::M           S:::::S
//       TT:::::::TT      p:::::ppppp:::::::M::::::M               M::::::e::::::::e                 C:::::CCCCCCCC::::M::::::M               M::::::SSSSSSS     S:::::S
//       T:::::::::T      p::::::::::::::::pM::::::M               M::::::Me::::::::eeeeeeee          CC:::::::::::::::M::::::M               M::::::S::::::SSSSSS:::::S
//       T:::::::::T      p::::::::::::::pp M::::::M               M::::::M ee:::::::::::::e            CCC::::::::::::M::::::M               M::::::S:::::::::::::::SS 
//       TTTTTTTTTTT      p::::::pppppppp   MMMMMMMM               MMMMMMMM   eeeeeeeeeeeeee               CCCCCCCCCCCCMMMMMMMM               MMMMMMMMSSSSSSSSSSSSSSS   
//                        p:::::p                                                                                                                                       
//                        p:::::p                                                                                                                                       
//                       p:::::::p                                                                                                                                      
//                       p:::::::p                                                                                                                                      
//                       p:::::::p                                                                                                                                      
//                       ppppppppp                                                                                                                                      

//  _____      __  __         ____ __  __ ____  
// |_   __ __ |  \/  | ___   / ___|  \/  / ___|     | AUTHOR: Xiaohe
//   | || '_ \| |\/| |/ _ \ | |   | |\/| \___ \     | EMAIL: 496631085@qq.com
//   | || |_) | |  | |  __/ | |___| |  | |___) |    | WECHAT: he4966
//   |_|| .__/|_|  |_|\___|  \____|_|  |_|____/     | DATETIME: 2023/03/22
//      |_|                                         | TpMeCMS

declare(strict_types=1);

namespace ImiApp\ApiServer\Api\Controller\user;

use Imi\Db\Db;
use Imi\Server\Http\Route\Annotation\Action;
use Imi\Server\Http\Route\Annotation\Controller;
use Imi\Server\Http\Route\Annotation\Route;
use Psr\Http\Message\ResponseInterface;
use Imi\Aop\Annotation\Inject;
// use Phpben\Imi\Validate\Annotation\Validate;
use Phpben\Imi\Auth\Annotation\Auth;


/**
 * 用户提成
 * @Auth(name="token",nologin={"no"})
 * @Controller("/user.commission/")
 */
class Commission extends UserBean
{



    /**
     * 用户提成统计
     *
     * @return void
     * @Action
     */
    public function count()
    {

        $where_com['user_id'] = $this->auth->user()->id;

        list($当月开始, $当月结束) = $this->GetMonthTime(date('Y-m'));
        list($上月开始, $上月结束) = $this->GetMonthTime(date('Y-m', strtotime('last month')));
        $今日开始 = strtotime(date('Y-m-d'));
        $今日结束 = $今日开始 + 86400;
        // $当月销售money = Db::name('store_money_log')
        //     ->whereEx($where_com)
        //     ->where('createtime', '>=', $当月开始)
        //     ->where('createtime', '<', $当月结束)
        //     ->where('typestatus_id', '=', 20)
        //     ->sum('money');

        // $上月销售money = Db::name('store_money_log')
        //     ->whereEx($where_com)
        //     ->where('createtime', '>=', $上月开始)
        //     ->where('createtime', '<', $上月结束)
        //     ->where('typestatus_id', '=', 20)
        //     ->sum('money');


        // $当月销售shell = Db::name('store_shell_log')
        //     ->whereEx($where_com)
        //     ->where('createtime', '>=', $当月开始)
        //     ->where('createtime', '<', $当月结束)
        //     ->where('typestatus_id', '=', 20)
        //     ->sum('shell');

        // $上月销售shell = Db::name('store_shell_log')
        //     ->whereEx($where_com)
        //     ->where('createtime', '>=', $上月开始)
        //     ->where('createtime', '<', $上月结束)
        //     ->where('typestatus_id', '=', 20)
        //     ->sum('shell');

        // $当月销售score = Db::name('store_score_log')
        //     ->whereEx($where_com)
        //     ->where('createtime', '>=', $当月开始)
        //     ->where('createtime', '<', $当月结束)
        //     ->where('typestatus_id', '=', 20)
        //     ->sum('score');

        // $上月销售score = Db::name('store_score_log')
        //     ->whereEx($where_com)
        //     ->where('createtime', '>=', $上月开始)
        //     ->where('createtime', '<', $上月结束)
        //     ->where('typestatus_id', '=', 20)
        //     ->sum('score');

        // $今日运费money = Db::name('order')
        //     ->whereEx($where_com)
        //     ->where('status', 'in', ['1', '2']) //订单状态:-2=交易关闭,-1=已取消,0=未支付,1=已支付,2=已完成
        //     ->where('createtime', '>=', $今日开始)
        //     ->where('createtime', '<=', $今日结束)
        //     ->sum('dispatch_amount');

        // $今日销售money = Db::name('order')
        //     ->whereEx($where_com)
        //     ->where('status', 'in', ['1', '2']) //订单状态:-2=交易关闭,-1=已取消,0=未支付,1=已支付,2=已完成
        //     ->where('createtime', '>=', $今日开始)
        //     ->where('createtime', '<=', $今日结束)
        //     ->sum('goods_amount');

        // $今日支付money = Db::name('order')
        //     ->whereEx($where_com)
        //     ->where('status', 'in', ['1', '2']) //订单状态:-2=交易关闭,-1=已取消,0=未支付,1=已支付,2=已完成
        //     ->where('createtime', '>=', $今日开始)
        //     ->where('createtime', '<=', $今日结束)
        //     ->sum('pay_fee');

        // $今日支付shell = Db::name('order')
        //     ->whereEx($where_com)
        //     ->where('status', 'in', ['1', '2']) //订单状态:-2=交易关闭,-1=已取消,0=未支付,1=已支付,2=已完成
        //     ->where('createtime', '>=', $今日开始)
        //     ->where('createtime', '<=', $今日结束)
        //     ->sum('shell_fee');

        $今日commission = Db::name('user_commission_log')
            ->whereEx($where_com)
            // ->where('status', 'in', ['1', '2']) //订单状态:-2=交易关闭,-1=已取消,0=未支付,1=已支付,2=已完成
            ->where('createtime', '>=', $今日开始)
            ->where('createtime', '<=', $今日结束)
            ->sum('commission');


        $当月提成 = Db::name('user_commission_log')
            ->whereEx($where_com)
            ->where('createtime', '>=', $当月开始)
            ->where('createtime', '<', $当月结束)
            ->sum('commission');

        $上月提成 = Db::name('user_commission_log')
            ->whereEx($where_com)
            ->where('createtime', '>=', $上月开始)
            ->where('createtime', '<', $上月结束)
            ->sum('commission');

        $总提成 = Db::name('user_commission_log')
            ->whereEx($where_com)
            ->sum('commission');


        $收益type_ids = [2, 3];
        $总收益积分 = Db::name('user_score_log')
            ->whereEx($where_com)
            ->where('typestatus_id', 'in', $收益type_ids)
            ->where('status', '=', '2') //状态:0=未知,1=支出,2=收入
            ->sum('score');

        $今天益积分 = Db::name('user_score_log')
            ->whereEx($where_com)
            ->where('typestatus_id', 'in', $收益type_ids)
            ->where('status', '=', '2') //状态:0=未知,1=支出,2=收入
            ->where('createtime', '>=', $今日开始)
            ->where('createtime', '<=', $今日结束)
            ->sum('score');
        $当月益积分 = Db::name('user_score_log')
            ->whereEx($where_com)
            ->where('typestatus_id', 'in', $收益type_ids)
            ->where('status', '=', '2') //状态:0=未知,1=支出,2=收入
            ->where('createtime', '>=', $当月开始)
            ->where('createtime', '<', $当月结束)
            ->sum('score');

        $上月益积分 = Db::name('user_score_log')
            ->whereEx($where_com)
            ->where('typestatus_id', 'in', $收益type_ids)
            ->where('status', '=', '2') //状态:0=未知,1=支出,2=收入
            ->where('createtime', '>=', $上月开始)
            ->where('createtime', '<', $上月结束)
            ->sum('score');


        return $this->success('', [

            'commission' => Db::name('user')->where('id', '=', $this->auth->user()->id)->value('commission'),
            'month_commission' => $当月提成 ?? 0,
            'last_month_commission' => $上月提成 ?? 0,
            'count_commission' => $总提成 ?? 0,
            'today_commission' => $今日commission ?? 0,

            'count_score' => $总收益积分 ?? 0,
            'today_score' => $今天益积分 ?? 0,
            'month_score' => $当月益积分 ?? 0,
            'last_month_score' => $上月益积分 ?? 0,


            // 'month_money' => $当月销售money ?? 0, 'month_shell' => $当月销售shell ?? 0, 'month_score' => $当月销售score ?? 0,

            // 'last_month_money' => $上月销售money ?? 0, 'last_month_shell' => $上月销售shell ?? 0, 'last_month_score' => $上月销售score ?? 0,

            // 'today_count_money' => $今日销售money+$今日运费money ?? 0, 'today_pay_money' => $今日支付money ?? 0, 'today_pay_shell' => $今日支付shell ?? 0, 'today_pay_score' => $今日支付score ?? 0
        ]);
    }

    /**
     * 获取月份提成
     *
     * @param integer $page 最近几年
     * @return void
     * @Action
     */
    public function get_month_commission($page = 1)
    {
        $where_com['user_id'] = $this->auth->user()->id;
        if ($page > 1) {
            $page-=1;
            $year = date('Y', strtotime('-' . $page . ' year'));
            for ($i = 12; $i > 0; $i--) {
                $date = $year . '-' . $i;
                $month = $i;

                list($月开始, $月结束) = $this->GetMonthTime($date);
                $提成 = Db::name('user_commission_log')
                    ->whereEx($where_com)
                    ->where('createtime', '>=', $月开始)
                    ->where('createtime', '<', $月结束)
                    ->sum('commission');
                $list[] = ['date' => $date, 'month' => $month, 'commission' => $提成 ?? 0];
            }
        } else {
            $year = date('Y');

            for ($i = date('n'); $i > 0; $i--) {
                $date = $year . '-' . $i;
                $month = $i;

                list($月开始, $月结束) = $this->GetMonthTime($date);
                $提成 = Db::name('user_commission_log')
                    ->whereEx($where_com)
                    ->where('createtime', '>=', $月开始)
                    ->where('createtime', '<', $月结束)
                    ->sum('commission');
                $list[] = ['date' => $date, 'month' => $month, 'commission' => $提成 ?? 0];
            }
        }
        return $this->success($page, $list);
    }


    /**
     * 获取月份积分
     *
     * @param integer $page 最近几年
     * @return void
     * @Action
     */
    public function get_month_score($page = 1)
    {
        $where_com['user_id'] = $this->auth->user()->id;
        if ($page > 1) {
            $page-=1;
            $year = date('Y', strtotime('-' . $page . ' year'));
            for ($i = 12; $i > 0; $i--) {
                $date = $year . '-' . $i;
                $month = $i;

                list($月开始, $月结束) = $this->GetMonthTime($date);
                $提成 = Db::name('user_score_log')
                    ->whereEx($where_com)
                    ->where('createtime', '>=', $月开始)
                    ->where('createtime', '<', $月结束)
                    ->sum('score');
                $list[] = ['date' => $date, 'month' => $month, 'score' => $提成 ?? 0];
            }
        } else {
            $year = date('Y');

            for ($i = date('n'); $i > 0; $i--) {
                $date = $year . '-' . $i;
                $month = $i;

                list($月开始, $月结束) = $this->GetMonthTime($date);
                $提成 = Db::name('user_score_log')
                    ->whereEx($where_com)
                    ->where('createtime', '>=', $月开始)
                    ->where('createtime', '<', $月结束)
                    ->sum('score');
                $list[] = ['date' => $date, 'month' => $month, 'score' => $提成 ?? 0];
            }
        }
        return $this->success($page, $list);
    }


    // /**
    //  * 获取辅导员邀请店铺列表
    //  *
    //  * @param integer $page 1
    //  * @param integer $limit 10
    //  * @return void
    //  * @Action
    //  */
    // public function get_coach_store_list(?int $page = 1, ?int  $limit = 10)
    // {
    //     $page = $page ?: 1;
    //     $limit = $limit ?: 10;


    //     $list = Db::name('store')->where('pid', '=', $this->auth->user()->id)->select()->getArray();

    //     if ($list)
    //         foreach ($list as $key => &$val) {
    //             $val['mobile'] = $this->HideMobile($val['mobile']);
    //             // $this->ChangeFieldData($val);
    //             $val['date'] = date('Y-m-d H:i', $val['createtime']);
    //         }
    //     return $this->success('ok', $list);
    // }
}
